//
//  HomeTableViewController.swift
//  微博swift
//
//  Created by apple on 15/10/14.
//  Copyright © 2015年 apple. All rights reserved.
//

import UIKit

class HomeTableViewController: VisitorViewController {

    var listViewModel:StatusListViewModel = StatusListViewModel()
    

    override func viewDidLoad() {
        super.viewDidLoad()
        //只有当登录成功才表示显示的是tableView,此时才能实现tableView相关的功能
        if UserAccountViewModel.sharedUserAccountViewModel.isLogin{
            
            setTableView()
            
            loadData()
        }
        
        // MARK: ----添加通知观察者,modal出图片浏览器
        NSNotificationCenter.defaultCenter().addObserverForName(PictureBrowserNotification, object: nil, queue: nil) { [weak self] (notify) -> Void in
            
            guard let indexPath = notify.userInfo?["indexPath"] as? NSIndexPath,
                picturesURLs = notify.userInfo?["pictureURLs"] as? [NSURL]  else{
                    
                return
                    
            }
            //图片浏览器
            let vc = PictureBrowserController(pictureURLs: picturesURLs, indexPath: indexPath)
            
            vc.view.backgroundColor = UIColor.whiteColor()
            
            self?.presentViewController(vc, animated: true, completion: { () -> Void in
                
            })
        }
        
        //一旦给这个属性设置,那么下拉时,就会有一个小菊花在转
        refreshControl = UIRefreshControl()
        
        refreshControl?.beginRefreshing()

    }
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        // MARK: ----通知(监听tableView的contentSize的变化)
//        NSNotificationCenter.defaultCenter().addObserver(self, selector: "contentSizeChange:", name: "ContentOffset", object: nil)
//        
        //加一个透明按钮在主页item上,用来刷新数据
        let btn = UIButton(frame: CGRect(x: 0, y: 0, width: (tabBarController?.tabBar.bounds.width)! / 5, height: 49))
        btn.addTarget(self, action: "clickHomeBtn", forControlEvents: .TouchUpInside)
        tabBarController?.tabBar.addSubview(btn)

    }
    
    override func viewDidDisappear(animated: Bool) {
        super.viewDidDisappear(animated)
        //移除透明按钮,保证可以主页页面可以切回来(8是试出来的)
        tabBarController?.tabBar.subviews[8].removeFromSuperview()
        
    }
    /// 点击首页按钮
    @objc private func clickHomeBtn(){
        
        refreshControl!.beginRefreshing()
        
      
        loadData()
    }
    
    /// 请求微博数据
    private func loadData(){
        
        listViewModel.askForStatus { (isSuccessed) -> () in
            if isSuccessed {
                
                //刷新数据
                self.tableView.reloadData()
                self.refreshControl?.endRefreshing()
            }
        }
    }
    
    ///准备tableView
    private func setTableView(){
        
        tableView.separatorStyle = .None
        
        tableView.registerClass(RetweetedStatusCell.self, forCellReuseIdentifier: RetweetedCellID)
        tableView.registerClass(MyStatusCell.self, forCellReuseIdentifier: MyCellID)
//        tableView.rowHeight = UITableViewAutomaticDimension
//
        tableView.estimatedRowHeight = 400
        
        /**
            使用预估行高,先进cell方法,再进行高方法,系统会根据预估行高,计算出一个适合的contentSize(滚动范围),提高用户体验,流畅,在计算显示行的行高
            不使用则是先进高度方法,再进cell方法,会计算所有行高,在计算显示行的行高
        */
    
    }
    
}


// MARK: ----数据源
extension HomeTableViewController
{
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return listViewModel.listArr.count
    }
    
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let vm = listViewModel.listArr[indexPath.row]
        var cell:StatusCell
        //有转发文字,说明是转发微博
        if vm.retweetedText != nil{
            //这个方法会调用行高方法(所以行高先计算出来)
            cell = tableView.dequeueReusableCellWithIdentifier(RetweetedCellID, forIndexPath: indexPath) as! RetweetedStatusCell
        }else{
            cell = tableView.dequeueReusableCellWithIdentifier(MyCellID, forIndexPath: indexPath) as! MyStatusCell
        }
        
        cell.viewModel = vm
        
        return cell
    }//结束的时候,cell才被创建
    
    ///  代理(对一个cell,高度方法被调用多次,到最后确认高度)
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
        /**
            无论是否使用预估行高,这里如果用到cell,必须是已经创建好的cell,高度必须是在返回cell前能计算出来的值
        */
        
        //注意
        return listViewModel.listArr[indexPath.row].rowHeight
    }
}

